/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package clases;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author casa
 */
public class ClsCalculoPartida {

    private ClsMetodos metodos = new ClsMetodos();
    private ClsDatabase bd = new ClsDatabase();

    public void partidas_unitarios_calculo(Object acu[][], int i, String rendimiento, String metrado) {
        double subtotal = 0, precio_unitario = 0, cantidad = 0, cuadrilla = 0;
        String tipo_insumo = "", sub_categoria = "";
        tipo_insumo = acu[i][5].toString();
        // actualizando el rendimineto
        sub_categoria = acu[i][6].toString();
        // si es mano de obra y equipos que tienen rendimiento
        precio_unitario = Double.parseDouble(acu[i][3].toString());//temp
        if (tipo_insumo.equals("2") || (tipo_insumo.equals("3") && sub_categoria.equals("2"))) {
            String prueba_cuadrilla = acu[i][1].toString();
            //prueba_cuadrilla=prueba_cuadrilla.replace(",", "");
            cuadrilla = metodos.num_d(prueba_cuadrilla);
            cantidad = (cuadrilla * 8) / Double.parseDouble(rendimiento);
            cantidad = cantidad * Double.parseDouble(metrado);
//            mdt.setValueAt(metodos.redondeo_2(cantidad), i, 5);//cantidad
            acu[i][2] = cantidad;//temp_cantidad
            subtotal = cantidad * precio_unitario;
        } else if (acu[i][7].toString().equals("%mo") == false) {
            acu[i][1]="";
            cantidad = Double.parseDouble(acu[i][2].toString()) * Double.parseDouble(metrado);//cantidad
            acu[i][2] = cantidad;//temp_cantidad
            subtotal = (cantidad * precio_unitario);
        }else{
            acu[i][1]="";
        }
//        mdt.setValueAt(metodos.redondeo_2(subtotal), i, 7);
        acu[i][4] = subtotal;

        // actualizando insumos precios e insumos ok....
        //bd.update("insumo", "precio='" + txtPrecio.getText().replace(",", "") + "'", " idinsumo='" + txtCodigoInsumo.getText() + "'");
    }

    public double calculoManoObra(Object acu[][], int n) {
        //mano de obra
        double valor = 0;
        for (int i = 0; i < n; i++) {
            if (acu[i][5].toString().equals("2")) {
                valor = valor + Double.parseDouble(acu[i][4].toString());//temp_precio
            }
        }
        return valor;
    }

    public void desgaste(Object acu[][], int n) {
        //mano de obra
        double valor = 0;
        for (int i = 0; i < n; i++) {
            if (acu[i][7].toString().equals("%mo")) {
                double total_mano_obra = calculoManoObra(acu, n);
                acu[i][3] = total_mano_obra;//temp
                valor = ((Double.parseDouble(acu[i][2].toString()) * total_mano_obra) / 100);
                acu[i][4] = valor;//temp
                // System.out.println("rendimiento " + Double.parseDouble(mdt.getValueAt(i, 11).toString()));
                break;
            }
        }
    }

    public void partida_actualiza(String idPartida) {
        String sql = "", rendimiento = "", metrado = "";
        Object[][] array_datos_partida = bd.select("partida_base", "idpartida,nombre,rendimiento,precio,tipo,idpartida_generica,idunidad", "idpartida='" + idPartida + "'");
//        System.out.println("marle.... "+idPartida); 
        if (array_datos_partida != null) {
            metrado = "1";
//            System.out.println("sergiooo.... "+idPartida);        
            rendimiento = metodos.redondeo_1(array_datos_partida[0][2].toString());
            ///actualizar a precios de hoy
            bd.transaccion_libre("UPDATE partida_base_detalle,insumo SET partida_base_detalle.precio_unitario=insumo.precio "
                    + "WHERE partida_base_detalle.idinsumo=insumo.idinsumo and partida_base_detalle.idpartida='" + idPartida + "' ;");
            //cargar datos
            sql = " select pd.idinsumo,pd.cuadrilla"
                    + ",pd.cantidad,pd.precio_unitario,"
                    + "pd.precio_parcial,i.idinsumo_tipo,"
                    + "i.subcatergoria,u.simbolo"
                    + " FROM partida_base_detalle pd, insumo i,insumo_tipo t,unidad u "
                    + " where pd.idinsumo=i.idinsumo and  t.idinsumo_tipo=i.idinsumo_tipo and u.idunidad=i.idunidad and pd.idpartida='" + idPartida + "' "
                    + "ORDER BY t.idinsumo_tipo asc, i.idinsumo asc ";
            Object data[][] = metodos.cargar_matriz(sql);
            int n = data.length;
            for (int i = 0; i < n; i++) {
                partidas_unitarios_calculo(data, i, rendimiento, metrado);
            }
            desgaste(data, n);
            //elimina
            try {
                bd.getConnection();
                PreparedStatement pstm = null;
                sql = "delete from partida_base_detalle where  idpartida='" + idPartida + "'  ";
                pstm = bd.conn.prepareStatement(sql);
                pstm.execute();
                double parcial = 0, sub_total = 0;
                for (int i = 0; i < n; i++) {
                    sub_total = Double.parseDouble(data[i][4].toString());
                    parcial = parcial + sub_total;
                    sql = " INSERT INTO partida_base_detalle (idpartida,idinsumo,cuadrilla,cantidad,precio_unitario,precio_parcial) values('"
                            + idPartida + "','" + data[i][0] + "','"
                            + data[i][1].toString().replace(",", "") + "','" + data[i][2] + "',"
                            + "'" + data[i][3] + "','" + sub_total + "')";
//                    System.out.println("sergiooo.... "+sql);
                    pstm = bd.conn.prepareStatement(sql);
                    pstm.execute();
                }
                sql = " update  partida_base set  precio='" + parcial + "' where  idpartida='" + idPartida + "' ";
                pstm = bd.conn.prepareStatement(sql);
                pstm.execute();
                pstm.close();


            } catch (Exception e) {
                System.err.println(e);
                e.printStackTrace();
                ClsException._exceptionWriteFile(e, "insertando partidas");
            }

        }

    }
}
